package SocialMediaSentiment;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class getLevensteinDistance {
	/*
	 * krijg een woord, en de woordenlijst binnen. pak het eerste woord van de
	 * woordenlijst en het binnengekregen woord bekijk wat de
	 * levenshteindistance is, en sla die op pak het volgende woord van de
	 * woordenlijst en bereken de levenshteindistance. als deze lager is dan de
	 * opgeslagen waarde van het eerste woord, overwrite die dan anders
	 * vergeten. Ga zo door tot het einde van de lijst, of tot een
	 * levenshteindistance van 0 is gevonden.
	 */

	public static void main(String[] args) throws Exception {

		// intialize variables
		File input = new File("lexicon.txt");
		File tweets = new File("TrainSetAll.txt");

		String text = StandardFunctions.deserializeString(input);
		String text2 = StandardFunctions.deserializeString(tweets);
		StringTokenizer st = new StringTokenizer(text);
		StringTokenizer stTweet = new StringTokenizer(text2);
		String currentTweet;
		String currentToken;
		String bestTweetWord;
		double distance = 0;
		double d = 0;
		

		try {
			BufferedWriter out = new BufferedWriter(new FileWriter(
					"correctedwords.txt"));

			while (stTweet.hasMoreTokens()) {
				// pak tweetwoord en reset
				currentTweet = stTweet.nextToken();
				bestTweetWord = currentTweet;
				double bestDistance = 1000;
				st = new StringTokenizer(text);
				
				while (st.hasMoreTokens()) {
					// pak nieuw woord uit lexicon en reset distance
					currentToken = st.nextToken();

					// bereken levenshtein distance
					d = levenstein2.levenshteinDistance(currentTweet,	currentToken);
					distance = d / currentTweet.length();

					// als distance = 0, write to file en break
					if (distance < bestDistance && distance < 0.25) {
						
						bestDistance = distance;
						bestTweetWord = currentToken;
					}

					// als de distance kleiner is dan de beste distance update,
					// distance en woord
					if (d == 0) {
						
						while (st.hasMoreTokens()) {
							st.nextToken();
						}
					}

				}
				out.write(bestTweetWord + "\n");
				
			}
			out.close();
		} catch (IOException e) {
			System.err.println("Exception ");
		}

	}
}
